home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / misc / volume6 / tif2ps / part01 next >
Encoding:
Internet Message Format  |  1989-02-03  |  30.9 KB

  1. Path: xanth!nic.MR.NET!csd4.milw.wisc.edu!leah!itsgw!steinmetz!uunet!allbery
  2. From: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
  3. Newsgroups: comp.sources.misc
  4. Subject: v06i015: tif2ps -- convert TIFF to PostScript (part 1 of 2)
  5. Keywords: TIFF, PostScript, Scanner
  6. Message-ID: <47747@uunet.UU.NET>
  7. Date: 29 Jan 89 20:26:03 GMT
  8. Sender: allbery@uunet.UU.NET
  9. Reply-To: andy@coma.UUCP (Andreas Lampen)
  10. Organization: Technical University of Berlin, Germany (West)
  11. Lines: 928
  12. Approved: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
  13.  
  14. Posting-number: Volume 6, Issue 15
  15. Submitted-by: andy@coma.UUCP (Andreas Lampen)
  16. Archive-name: tif2ps/part01
  17.  
  18. This is part 1 (of 2) of "tif2ps", a program that converts TIFF
  19. (Tag Image File Format - a format for scanned images) to PostScript.
  20.  
  21. If works on UNIX machines and on PCs.
  22.  
  23. Enjoy it,
  24.      Andy
  25.  
  26. ---- Cut here ---- Cut here ---- Cut here ---- Cut here ---- Cut here ----
  27. #! /bin/sh
  28. # This is a shell archive, meaning:
  29. # 1. Remove everything above the #! /bin/sh line.
  30. # 2. Save the resulting text in a file.
  31. # 3. Execute the file with /bin/sh (not csh) to create:
  32. #    README
  33. #    Makefile
  34. #    defs.h
  35. #    tif.h
  36. #    tif2ps.c
  37. #    genps.c
  38. #    andy.tif.Z.btoa
  39. # This archive created: Thu Dec 29 20:42:57 1988
  40. export PATH; PATH=/bin:/usr/bin:$PATH
  41. echo shar: "extracting 'README'" '(2862 characters)'
  42. if test -f 'README'
  43. then
  44.     echo shar: "will not over-write existing file 'README'"
  45. else
  46. cat << \SHAR_EOF > 'README'
  47. This is version 1.0 of tif2ps/tifdump, a program that converts
  48. TIFF-files to PostScript (*).
  49.  
  50. It is written by: Andreas Lampen
  51.           Tech. Univ. Berlin, FR 5-6
  52.           Franklinstr. 28/29
  53.           D-1000 Berlin 10, West Germany
  54.           Tel: +49-30-314-73496
  55.           E-mail: andy@coma.uucp (from US: pyramid!tub!coma!andy) or
  56.               andy@db0tui62.bitnet
  57.  
  58. -------------------------------------------------------------------
  59. Copyright (C) 1988 by the author.
  60. Permission is granted to copy and distribute this program
  61. without charge, provided this copyright notice is included
  62. in the copy.
  63. This Software is distributed on an as-is basis. There will be
  64. ABSOLUTELY NO WARRANTY for any part of this software to work
  65. correct. In no case will the author be liable to you for damages
  66. caused by the usage of this software.
  67. -------------------------------------------------------------------
  68.  
  69. This Distribution contains the files
  70.     README         -- The file you are actually reading.
  71.     Makefile     -- The Makefile for building and installing
  72.             the programs "tif2ps" and "tifdump"
  73.     Makefile.PC  -- The MSDOS (Microsoft "make") Makefile
  74.     Shapefile    -- The Shapefile for building and installing
  75.             "tif2ps" and "tifdump".
  76.             You can use this together with the "shape"
  77.             configuration management toolkit, which
  78.             will appear in the net soon.
  79.     defs.h         -- general definitions
  80.     tif.h         -- TIFF specific definitions
  81.     tif2ps.c     -- The source file containing the main program.
  82.     scantif.c    -- The front end of the converter.
  83.     genps.c         -- The back end of the converter.
  84.     getopt.c     -- A public domain getopt implementation.
  85.             Only needed for the PC version.
  86.     version.c    -- A source file containing a routine that returns
  87.             the actual version number.
  88.     andy.tif.Z.btoa
  89.              -- A compressed TIFF file (a small picture of
  90.             the author). Use "atob" and "uncompress"
  91.             to reconstruct the file.
  92.     tif2ps.1     -- The manual page for "tif2ps" and "tifdump"
  93.     
  94. The program has been tested only with TIFF-files generated by a
  95. HP Scanjet up to now.
  96. It was developed on a
  97.     microVAX II running BSD 4.3
  98. and it also runs on
  99.     Sun3 with SunOS 4.0 and on
  100.     IBM PC/AT with MS-DOS 3.20/Microsoft C 5.00.
  101. It should be easy portable to other machines.
  102.  
  103. For installing "tif2ps" on a UNIX system, you find the installation
  104. instructions in the Makefile. On a PC just type "MAKE MAKEFILE.PC"
  105. (this works with Microsoft "make").
  106.  
  107. The PC version does only support TIFF files that contain at most
  108. 45000 bytes of image data. I assume this is because all image data
  109. are read into main memory with one fread call. Up to now, I was too
  110. lazy to fix that.
  111.  
  112. Feel free to do any modifications or improvements to the code.
  113. If you do so, please send me your patches. I will try to introduce
  114. your patches into further releases.
  115.  
  116. Have fun,
  117.       Andy
  118.  
  119. ---------
  120. (*) PostScript is a trademark of Adobe Systems Incorporated.
  121.  
  122.  
  123.  
  124.  
  125. SHAR_EOF
  126. if test 2862 -ne "`wc -c < 'README'`"
  127. then
  128.     echo shar: "error transmitting 'README'" '(should have been 2862 characters)'
  129. fi
  130. fi
  131. echo shar: "extracting 'Makefile'" '(1056 characters)'
  132. if test -f 'Makefile'
  133. then
  134.     echo shar: "will not over-write existing file 'Makefile'"
  135. else
  136. cat << \SHAR_EOF > 'Makefile'
  137. #
  138. # Makefile for tif2ps
  139. #
  140. # The installation procedure for tif2ps is faily simple.
  141. #
  142. # Where and by whom shall tif2ps and it's manual be installed ?
  143. # (change the following 4 macro definitions if necessary)
  144.  
  145. INSTALDIR = /usr/local
  146. MANINSTALDIR = /usr/localman/man1
  147. INSTALNAME = bin
  148. INSTALGROUP = bin
  149.  
  150. #
  151. # If you are on a Motorola 68k based machine (eg. Sun3), replace the
  152. # "CFLAGS" definition by:
  153. #
  154. # CFLAGS = -O -DUNIX -DMOTOROLA
  155.  
  156. CFLAGS = -O -DUNIX
  157. LDFLAGS = -s
  158.  
  159. #
  160. # Ready!
  161. # Now save the Makefile and type "make" to build the system and
  162. # or "make install" to build and install it.
  163. #
  164.  
  165. SOURCE = tif2ps.c scantif.c genps.c
  166. INCLUDE = tif.h defs.h
  167. VERSION = version
  168. OBJECTS = tif2ps.o scantif.o genps.o $(VERSION).o
  169.  
  170. tif2ps: $(OBJECTS)
  171.     $(CC) -o tif2ps $(LDFLAGS) $(OBJECTS) -lm
  172.     rm -f tifdump
  173.     ln tif2ps tifdump
  174.  
  175. install:
  176.     install -c -o bin -g bin -m 644 tif2ps.1 $(MANINSTALDIR)
  177.     install -c -o bin -g bin -m 755 tif2ps $(INSTALDIR)
  178.     rm -f $(INSTALDIR)/tifdump
  179.     ln $(INSTALDIR)/tif2ps $(INSTALDIR)/tifdump
  180.  
  181. $(OBJECTS): $(INCLUDE)
  182.  
  183. clean :
  184.     rm $(OBJECTS)
  185.  
  186. SHAR_EOF
  187. if test 1056 -ne "`wc -c < 'Makefile'`"
  188. then
  189.     echo shar: "error transmitting 'Makefile'" '(should have been 1056 characters)'
  190. fi
  191. fi
  192. echo shar: "extracting 'defs.h'" '(1056 characters)'
  193. if test -f 'defs.h'
  194. then
  195.     echo shar: "will not over-write existing file 'defs.h'"
  196. else
  197. cat << \SHAR_EOF > 'defs.h'
  198. /*
  199.  * tif2ps/tifdump -- convert TIFF to PostScript
  200.  *
  201.  * written by:
  202.  * Andreas Lampen, TU-Berlin (andy@coma.UUCP)
  203.  *                 (andy@db0tui62.BITNET)
  204.  *
  205.  * Copyright (C) 1988 by the author.
  206.  * Permission is granted to copy and distribute this program
  207.  * without charge, provided this copyright notice is included
  208.  * in the copy.
  209.  * This Software is distributed on an as-is basis. There will be
  210.  * ABSOLUTELY NO WARRANTY for any part of this software to work
  211.  * correct. In no case will the author be liable to you for damages
  212.  * caused by the usage of this software.
  213.  */
  214.  
  215. /*
  216.  * defs.h -- general type and constant definitions
  217.  * 
  218.  * $Header: defs.h[1.0] Thu Dec 29 20:10:13 1988 andy@coma published $
  219.  */
  220.  
  221. typedef char           CHAR;
  222. typedef int            INT;
  223. typedef unsigned int   UINT;
  224. typedef short          SHORT;
  225. typedef unsigned short USHORT;
  226. typedef long           LONG;
  227. typedef unsigned long  ULONG;
  228. typedef double         DOUBLE;
  229.  
  230. #define ERROR -1
  231. #define OK     0
  232.  
  233. #define VOID   void
  234. #define LOCAL  static
  235. #define STATIC static
  236. #define EXPORT
  237. SHAR_EOF
  238. if test 1056 -ne "`wc -c < 'defs.h'`"
  239. then
  240.     echo shar: "error transmitting 'defs.h'" '(should have been 1056 characters)'
  241. fi
  242. fi
  243. echo shar: "extracting 'tif.h'" '(5243 characters)'
  244. if test -f 'tif.h'
  245. then
  246.     echo shar: "will not over-write existing file 'tif.h'"
  247. else
  248. cat << \SHAR_EOF > 'tif.h'
  249. /*
  250.  * tif2ps/tifdump -- convert TIFF to PostScript
  251.  *
  252.  * written by:
  253.  * Andreas Lampen, TU-Berlin (andy@coma.UUCP)
  254.  *                 (andy@db0tui62.BITNET)
  255.  *
  256.  * Copyright (C) 1988 by the author.
  257.  * Permission is granted to copy and distribute this program
  258.  * without charge, provided this copyright notice is included
  259.  * in the copy.
  260.  * This Software is distributed on an as-is basis. There will be
  261.  * ABSOLUTELY NO WARRANTY for any part of this software to work
  262.  * correct. In no case will the author be liable to you for damages
  263.  * caused by the usage of this software.
  264.  */
  265.  
  266. /*
  267.  * tif.h -- type and constant definitions
  268.  * 
  269.  * $Header: tif.h[1.0] Thu Dec 29 20:10:15 1988 andy@coma published $
  270.  */
  271.  
  272. /*
  273.  * installation dependent definitions
  274.  */
  275.  
  276. #define MAXIFDS 16
  277. #define MAXVAL  128
  278.  
  279. /*===========================
  280.  * General Types
  281.  *===========================*/
  282.  
  283. /* Input file descriptor */
  284. typedef struct {
  285.   FILE    *fdes;
  286.   USHORT  order;              /* Byte order */
  287. } DATAFILE;
  288.  
  289. /*===========================
  290.  * Picture Data Types
  291.  *===========================*/
  292.  
  293. /* strips */
  294. typedef struct {
  295.   ULONG    byteCount;
  296.   CHAR     *data;
  297. } STRIP;
  298.  
  299. /* general image data */
  300. typedef struct {
  301.   USHORT subfileType;
  302.   USHORT imWidth;
  303.   USHORT imLength;
  304.   ULONG  rowsPerStrip;        /* may be SHORT -- not implemented */
  305.   USHORT stripsPerImage;    /* number of strips */
  306.   STRIP  *strips;        /* List of pointers to Strips */
  307.   USHORT samplesPerPixel;    /* always 1 -- handle only monochrome picts. */
  308.   USHORT bitsPerSample;        /* should be capable to hold multiple values */
  309.                 /* for color pictures */
  310.   USHORT planConf;        /* Planar Configuration */
  311.   USHORT compression;        /* should be capable to hold multiple values */
  312.                 /* for color pictures */
  313.   ULONG  gr3Options;
  314.   ULONG  gr4Options;
  315.   USHORT fillOrder;
  316.   USHORT threshholding;
  317.   USHORT cellWidth;
  318.   USHORT cellLength;  
  319. } IMAGE;
  320. }/* photometrics */
  321. typedef struct {
  322.   USHORT minSampleValue;
  323.   USHORT maxSampleValue;
  324.   USHORT photometInterpr;    /* Photometric Interpretation */
  325.   USHORT grayResponseUnit;
  326.   USHORT *grayResponseCurve;    /* Array of grayvalues */
  327. } PHMETRIC;
  328.  
  329. /* correspondence to the physical world */
  330. typedef struct {
  331.   DOUBLE   xRes;                 /* XResolution */
  332.   DOUBLE   yRes;                 /* YResolution */
  333.   USHORT   resUnit;              /* ResolutionUnit */
  334.   USHORT   orientation;
  335. } PHYS;
  336.  
  337. /* document context */
  338. typedef struct {
  339.   CHAR     *docName;
  340.   CHAR     *pageName;
  341.   DOUBLE   xPos;        /* XPosition -- lower left corner */
  342.   DOUBLE   yPos;        /* YPosition -- lower left corner */
  343.   DOUBLE   xMax;        /* XMaximum -- upper right corner */
  344.   DOUBLE   yMax;        /* YMaximum -- upper right corner */
  345.   USHORT   pageNo;        /* page number */
  346.   USHORT   noOfPages;        /* total number of pages */
  347. } CONTEXT;
  348.  
  349. /* a whole picture */
  350. typedef struct {
  351.   IMAGE    image;
  352.   PHMETRIC photoMetric;
  353.   PHYS     physWorld;
  354.   CONTEXT  context;
  355. } PICTURE;
  356.     
  357. /*===========================
  358.  * TIFF Types
  359.  *===========================*/
  360.  
  361. /* IFD Entry */
  362. typedef struct {
  363.   USHORT   tag;            /* entry Tag */
  364.   USHORT   type;        /* entry type */
  365.   ULONG    length;        /* entry length */
  366.   ULONG    valoffset;        /* value or value offset */
  367.   CHAR     *value;        /* pointer to value */
  368. } ENTRY;
  369.  
  370. /* Image File Directory (IFD) */
  371. typedef struct {
  372.   USHORT   entrycount;        /* number of entries in IFD */
  373.   ENTRY    *entrylist;        /* list of IFD entries */
  374.   ULONG    nextifd;        /* Offset of next IFD */
  375. } IFD;
  376.  
  377. /* TIF-file Header */
  378. typedef struct {
  379.   USHORT  byteorder;        /* Byte order "II" or "MM" */
  380.   USHORT  version;        /* TIFF Version (current 42) */
  381.   ULONG   offset;        /* offset of first IFD */
  382. } HEADER;
  383.   
  384. /* general structure */
  385. typedef struct {
  386.   HEADER  header;               /* Header of TIF-file */
  387.   IFD     ifdlist[MAXIFDS];    /* List of IFDs */
  388. } TIFF;
  389.  
  390. /*==============================
  391.  * constants
  392.  *==============================*/
  393.  
  394. #define TIFFBYTE     1
  395. #define TIFFASCII    2
  396. #define TIFFSHORT    3
  397. #define TIFFLONG     4
  398. #define TIFFRATIONAL 5
  399.  
  400. #define INTELTIFF    0x4949
  401. #define MOTOROLATIFF 0x4d4d
  402.  
  403. /*** Fields ***/
  404.  
  405. #define SUBFILETYPE            255
  406. #define IMAGEWIDTH             256
  407. #define IMAGELENGTH            257
  408. #define BITSPERSAMPLE          258
  409. #define COMPRESSION            259
  410. #define PHOTOMETRICINTERPR    262
  411. #define THRESHHOLDING          263
  412. #define CELLWIDTH              264
  413. #define CELLLENGTH             265
  414. #define FILLORDER              266
  415. #define DOCUMENTNAME           269
  416. #define IMAGEDESCRIPTION       270
  417. #define MAKE                   271
  418. #define MODEL                  272
  419. #define STRIPOFFSETS           273
  420. #define ORIENTATION            274
  421. #define SAMPLESPERPIXEL        277
  422. #define ROWSPERSTRIP           278
  423. #define STRIPBYTECOUNTS        279
  424. #define MINSAMPLEVALUE         280
  425. #define MAXSAMPLEVALUE         281
  426. #define XRESOLUTION            282
  427. #define YRESOLUTION            283
  428. #define PLANARCONFIGURATION    284
  429. #define PAGENAME               285
  430. #define XPOSITION              286
  431. #define YPOSITION              287
  432. #define FREEOFFSETS            288
  433. #define FREEBYTECOUNTS         289
  434. #define GRAYRESPONSEUNIT       290
  435. #define GRAYRESPONSECURVE      291
  436. #define GROUP3OPTIONS          292
  437. #define GROUP4OPTIONS          293
  438. #define RESOLUTIONUNIT         296
  439. #define PAGENUMBER             297
  440. #define COLORRESPONSEUNIT      300
  441. #define COLORRESPONSECURVES    301
  442. SHAR_EOF
  443. if test 5243 -ne "`wc -c < 'tif.h'`"
  444. then
  445.     echo shar: "error transmitting 'tif.h'" '(should have been 5243 characters)'
  446. fi
  447. fi
  448. echo shar: "extracting 'tif2ps.c'" '(5124 characters)'
  449. if test -f 'tif2ps.c'
  450. then
  451.     echo shar: "will not over-write existing file 'tif2ps.c'"
  452. else
  453. cat << \SHAR_EOF > 'tif2ps.c'
  454. /*
  455.  * tif2ps/tifdump -- convert TIFF to PostScript
  456.  *
  457.  * written by:
  458.  * Andreas Lampen, TU-Berlin (andy@coma.UUCP)
  459.  *                 (andy@db0tui62.BITNET)
  460.  *
  461.  * Copyright (C) 1988 by the author.
  462.  * Permission is granted to copy and distribute this program
  463.  * without charge, provided this copyright notice is included
  464.  * in the copy.
  465.  * This Software is distributed on an as-is basis. There will be
  466.  * ABSOLUTELY NO WARRANTY for any part of this software to work
  467.  * correct. In no case will the author be liable to you for damages
  468.  * caused by the usage of this software.
  469.  */
  470.  
  471. /*
  472.  * tif2ps.c -- main program 
  473.  *
  474.  * $Header: tif2ps.c[1.0] Thu Dec 29 20:11:01 1988 andy@coma published $
  475.  */
  476.  
  477. #include <stdio.h>
  478. #ifdef MSDOS
  479. #include <string.h>
  480. #include <time.h>
  481. #else
  482. #include <strings.h>
  483. #include <sys/time.h>
  484. #endif
  485. #include <setjmp.h>
  486. #include <signal.h>
  487. #include "defs.h"
  488. #include "tif.h"
  489.  
  490. extern CHAR *optarg;
  491. extern INT  optind;
  492.  
  493. CHAR    *progname, *version();
  494.  
  495. main (ac, av)
  496.      INT   ac;
  497.      CHAR  **av;
  498. {
  499.   INT     getopt(), c, nfiles, i, cleanup();
  500.   VOID    usage(), logerr(), dodump(), genps();
  501.   DOUBLE  xoffset = 0., yoffset= 0., scalefactor = 1., height = 0.;
  502.   DOUBLE  xresfactor, yresfactor, atof();
  503.   PICTURE picts[8]; /* maximal 8 pictures */
  504.   TIFF    tiff;
  505.   jmp_buf env;
  506.  
  507. #ifdef MSDOS
  508.   if (!strrchr (av[0], '\\')) progname = av[0];
  509.     else progname = strrchr (av[0], '\\') + 1;
  510. #else
  511.   if (!rindex (av[0], '/')) progname = av[0];
  512.     else progname = rindex (av[0], '/') + 1;
  513. #endif
  514.  
  515.   if (ac < 2)
  516.     {
  517.       usage ();
  518.       exit (-1);
  519.     }
  520.  
  521.   while ((c = getopt (ac, av, "h:s:vx:y:")) != EOF)
  522.     {
  523.       switch (c)
  524.     {
  525.     case 'h': /* picture height */
  526.       if (scalefactor != 1.)
  527.         logerr (progname, "only one of 'h' or 's' can be given");
  528.       else
  529.         height = atof (optarg) * 72;
  530.       break;
  531.     case 's': /* scale factor */
  532.       if (height != 0.)
  533.         logerr (progname, "only one of 'h' or 's' can be given");
  534.       else
  535.         scalefactor = atof (optarg);
  536.       break;
  537.     case 'v': /* print current version of this program */
  538.       printf ("This is %s version %s.\n", av[0], version());
  539.       exit (0);
  540.     case 'x': /* xposition (in inches) */
  541.       xoffset = atof (optarg) * 72;
  542.       break;
  543.     case 'y': /* yposition (in inches) */
  544.       yoffset = atof (optarg) * 72;
  545.       break;
  546.     default:
  547.       usage ();
  548.       exit (-1);
  549.     }
  550.     }  /* end of command line parsing */
  551.  
  552.   (VOID) signal (SIGINT, cleanup);
  553.  
  554.   nfiles = ac - optind;
  555.   for (i = 0; i < nfiles; i++)
  556.     {
  557.       /* (VOID) setjmp (env); --- not used */
  558.       if (scantif (av[i+optind], picts, &tiff) == ERROR)
  559.     { logerr (progname, "cannot read file"); exit (-1); }
  560.       if (!strcmp (progname, "tifdump"))
  561.     {
  562.       printf ("This is %s version %s.\n\n", progname, version());
  563.       dodump (av[i+optind], &tiff);
  564.       continue;
  565.     }
  566.       /* else do initializations */
  567.       /* a loop through all pictures should be inserted here */
  568.  
  569.       /* adjust bytecount ???? perhaps not correct */
  570.       /* manages only single strip pictures */
  571.       if (picts[0].image.strips[0].byteCount == 0)
  572.     picts[0].image.strips[0].byteCount = 
  573.       (picts[0].image.imWidth * picts[0].image.imLength) / 
  574.         (8 / picts[i].image.bitsPerSample);
  575.  
  576.       switch (picts[0].physWorld.resUnit)
  577.     {
  578.     case 1: /* special */
  579.       xresfactor = 1. / picts[0].physWorld.xRes;
  580.       yresfactor = 1. / picts[0].physWorld.yRes;
  581.       break;
  582.     case 2: /* inches */
  583.       xresfactor = 72. / picts[0].physWorld.xRes;
  584.       yresfactor = 72. / picts[0].physWorld.yRes;
  585.       break;
  586.     case 3: /* centimetres */
  587.       xresfactor = 28.3465 / picts[0].physWorld.xRes;
  588.       yresfactor = 28.3465 / picts[0].physWorld.yRes;
  589.       break;
  590.     }
  591.       
  592.       if (height != 0.)
  593.     scalefactor = (height / (picts[0].image.imLength * yresfactor));
  594.       
  595.       if (xoffset != 0.)
  596.     picts[0].context.xPos = xoffset;
  597.       if (yoffset != 0.)
  598.     picts[0].context.yPos = yoffset;
  599.       
  600.       picts[0].context.xMax = 
  601.     (picts[0].image.imWidth * xresfactor * scalefactor) +
  602.       picts[0].context.xPos;
  603.       picts[0].context.yMax = 
  604.     (picts[0].image.imLength * yresfactor * scalefactor) + 
  605.       picts[0].context.yPos;
  606.       
  607.       genps (av[i+optind], picts);
  608.     }
  609. } /* end of main */
  610.  
  611. LOCAL INT cleanup ()
  612. {
  613. #ifdef MSDOS
  614.   cprintf ("cleanup...\n");
  615. #else
  616.   fprintf (stderr, "cleanup...\n");
  617. #endif
  618.   exit (-1);
  619. }
  620.  
  621. LOCAL VOID usage ()
  622. {
  623.   printf ("usage: %s [-h <height>] [-s <scalefactor>]\n", progname);
  624.   printf ("\t\t[-v] [-x <x-offset>] [-y <y-offset>] file1 ...\n");
  625. }
  626.  
  627. EXPORT VOID logerr (routine, msg)
  628.      CHAR *routine, *msg;
  629. {
  630. #ifdef MSDOS
  631.   cprintf ("%s(%s): %s\n", progname, routine, msg);
  632. #else
  633.   fprintf (stderr, "%s(%s): %s\n", progname, routine, msg);
  634. #endif
  635. }
  636.  
  637. EXPORT CHAR *date()
  638. {
  639.   LONG seconds, time();
  640. #ifndef MSDOS
  641.   CHAR *asctime();  
  642. #endif
  643.  
  644. #ifdef MSDOS
  645.   time (&seconds);
  646.   return (ctime (&seconds));
  647. #else 
  648.   seconds = time ((LONG *) 0);
  649.   return (asctime (localtime (&seconds)));
  650. #endif
  651. }
  652.  
  653. EXPORT CHAR *caller()
  654. {
  655.   STATIC CHAR name[128];
  656. #ifdef MSDOS
  657.   strcpy (name, ""); /* cannot get hostname and login name */
  658. #else
  659.   CHAR *getlogin (), host[128];
  660.  
  661.   (VOID) gethostname (host, 128);
  662.   (VOID) sprintf (name, "%s@%s\0", getlogin(), host);
  663. #endif
  664.   return (name);
  665. }
  666. SHAR_EOF
  667. if test 5124 -ne "`wc -c < 'tif2ps.c'`"
  668. then
  669.     echo shar: "error transmitting 'tif2ps.c'" '(should have been 5124 characters)'
  670. fi
  671. fi
  672. echo shar: "extracting 'genps.c'" '(3878 characters)'
  673. if test -f 'genps.c'
  674. then
  675.     echo shar: "will not over-write existing file 'genps.c'"
  676. else
  677. cat << \SHAR_EOF > 'genps.c'
  678. /*
  679.  * tif2ps/tifdump -- convert TIFF to PostScript
  680.  *
  681.  * written by:
  682.  * Andreas Lampen, TU-Berlin (andy@coma.UUCP)
  683.  *                 (andy@db0tui62.BITNET)
  684.  *
  685.  * Copyright (C) 1988 by the author.
  686.  * Permission is granted to copy and distribute this program
  687.  * without charge, provided this copyright notice is included
  688.  * in the copy.
  689.  * This Software is distributed on an as-is basis. There will be
  690.  * ABSOLUTELY NO WARRANTY for any part of this software to work
  691.  * correct. In no case will the author be liable to you for damages
  692.  * caused by the usage of this software.
  693.  */
  694.  
  695. /*
  696.  * genps.c -- generate PostScript output
  697.  * 
  698.  * $Header: genps.c[1.0] Thu Dec 29 20:10:57 1988 andy@coma published $
  699.  */
  700.  
  701. #include <stdio.h>
  702. #include <math.h>
  703. #include "defs.h"
  704. #include "tif.h"
  705.  
  706. extern CHAR *progname;
  707. extern USHORT pages;
  708.  
  709. EXPORT VOID genps (filename, picts)
  710.      CHAR    *filename;
  711.      PICTURE *picts;
  712. {
  713.   USHORT xsamples, ysamples, c1, c2, noOfGrayVals;
  714.   LONG   i;
  715.   CHAR   *version(), *date(), *caller();
  716.   VOID   logerr();
  717.  
  718.   /* a loop through all pictures should be inserted here */
  719.   
  720.   printf ("%%!PS-Adobe-2.0\n");
  721.   printf ("%%%%Title: %s\n",
  722.        picts[0].context.docName[0] ? picts[0].context.docName : filename);
  723.   printf ("%%%%Creator: %s %s\n", progname, version());
  724.   printf ("%%%%CreationDate: %s", date());
  725.   printf ("%%%%For: %s\n", caller());
  726.   printf ("%%%%Page: %d of %d\n", 
  727.        picts[0].context.pageNo, picts[0].context.noOfPages);
  728.   printf ("%%%%BoundingBox: %.2f %.2f %.2f %.2f\n",
  729.        picts[0].context.xPos, picts[0].context.yPos,
  730.        picts[0].context.xMax, picts[0].context.yMax);
  731.   printf ("%%%%EndComments\n");
  732.  
  733.   /* the calculation of a reasonable number of rows should be inserted here */
  734.   printf ("/DataString 2 string def\n");
  735.   printf ("%%%%EndProlog\n");
  736.  
  737.   printf ("/vmstat save def\n");
  738.   printf ("initgraphics\n");
  739.   printf ("( :: %s/TIFF->PostScript - job starts ::\\n) print flush\n", caller ());
  740.   printf ("( :: printing %s ::\\n) print flush\n", filename);
  741.  
  742.   /* Image */
  743.   printf ("gsave\n");
  744.  
  745.   if (picts[0].image.bitsPerSample > 1)
  746.     {
  747.       /* define new grayscale */
  748.       noOfGrayVals = (SHORT) pow ((DOUBLE)2, 
  749.                   (DOUBLE)picts[0].image.bitsPerSample);
  750.       printf ("{ %d mul round cvi\n[ ", noOfGrayVals-1);
  751.       for (i = 0 ; i < noOfGrayVals; i++)
  752.     printf ("%d ", picts[0].photoMetric.grayResponseCurve[i]);
  753.       printf ("]\nexch get %d div 1.0 exch sub } settransfer\n",
  754.            picts[0].photoMetric.grayResponseCurve[0]);
  755.     }
  756.  
  757.   printf ("%.2f %.2f translate\n",
  758.        picts[0].context.xPos, picts[0].context.yPos);
  759.   printf ("%.2f %.2f scale\n", 
  760.        picts[0].context.xMax - picts[0].context.xPos,
  761.        picts[0].context.yMax - picts[0].context.yPos);
  762.  
  763.   /* adjust transformation matrix */
  764.  
  765.   /* do image data */
  766.   xsamples = (picts[0].image.strips[0].byteCount / picts[0].image.imLength) * 
  767.     (8 / picts[0].image.bitsPerSample);
  768.   ysamples = picts[0].image.imLength;
  769.   printf ("%d %d %d ", 
  770.        xsamples, ysamples, picts[0].image.bitsPerSample);
  771.  
  772.   switch (picts[0].physWorld.orientation)
  773.     {
  774.     case 1:
  775.       printf ("[ %d 0 0 %d 0 %d ]\n", xsamples, -ysamples, ysamples);
  776.       break;
  777.     case 4:
  778.       printf ("[ %d 0 0 %d 0 0 ]\n", xsamples, ysamples);
  779.       break;
  780.     default:
  781.       logerr ("genps", "invalid orientation");
  782.       return;
  783.     }
  784.  
  785.   printf ("{ currentfile DataString readhexstring pop } image \n");
  786.   for (i=0; i < picts[0].image.strips[0].byteCount; i++)
  787.     {
  788.       c1 = (picts[0].image.strips[0].data[i] & 0360) >> 4; /* upper 4 bits */
  789.       c2 = (picts[0].image.strips[0].data[i] & 017); /* lower 4 bits */
  790.       printf ("%c%c", (c1 <= 9) ? (c1+'0') : (c1+'W'),
  791.                            (c2 <= 9) ? (c2+'0') : (c2+'W'));
  792.     }
  793.  
  794.   printf ("\ngrestore\n");
  795.  
  796.   printf ("showpage\n");
  797.   printf ("vmstat restore\n");
  798.   printf ("%%%%Trailer\n");
  799.  
  800.   printf ("( :: Job finished ::\\n) print flush\n");
  801. }
  802.  
  803. SHAR_EOF
  804. if test 3878 -ne "`wc -c < 'genps.c'`"
  805. then
  806.     echo shar: "error transmitting 'genps.c'" '(should have been 3878 characters)'
  807. fi
  808. fi
  809. echo shar: "extracting 'andy.tif.Z.btoa'" '(8835 characters)'
  810. if test -f 'andy.tif.Z.btoa'
  811. then
  812.     echo shar: "will not over-write existing file 'andy.tif.Z.btoa'"
  813. else
  814. cat << \SHAR_EOF > 'andy.tif.Z.btoa'
  815. xbtoa Begin
  816. +.\KbP,JA2!.[?E!<*!9!$Hg.L(>4YFD+J[`;foc5$T5GTR_t4%8pF:Eo]an,p/.0OOE/V"YE(CL_,
  817. )e9Igf'`#Mogk<fV7ATBVP+m;IF>mt1u))6ciK)l>#1dZ1L<1-K0Ed.ok#p>3[%4:m#F/0GS,<HfKJ
  818. l^u#-@fomN7]DYb_T!oc&E"e8R%=)%C3M=E%k[P\Mij/V0I!_`K5<*b*3/D+MO0M-:j@LPN#9/6]95
  819. (\[:U,R1Q?(c'l''aGhR.SkU02jhSA<FUl*s258]]+[:^_3#<psJIs")NEUMm`hstm16+KdDpPgY7m
  820. EQfGA@2/<[WJOI$=0gZOp3XNF;Ko7$q"F-LH&,-;9cX8%cPBrMIU,RHBo`qF/o*BBP8_SS>)eoGrJe
  821. WKr?jUnJTnF8-Kkf7BZqQ<J[_"__'lq.XNhEopp<h/MF,L.d@MU57ZXO`fh0CG;@DTkU-%Qm-4aR:r
  822. 7?TuEp5@P*mh?]I.P2r0\(0rA'9M_/Y9L']u1+EKBNQlcC12>IfNLpZC'QDk24(QjufQC)3f.1)]:!
  823. :5I&Rr:n7>a9@K,\CF\damMh[ik_WR16G,^i))686^gj)O+fHn@9DWFHAt,-Z-a%[htul(:\(C>oK+
  824. ZNn(O]R\Llm3[SL4mFGm@jMf]JR`bja)Nm3DG,p_8f%+DVXVm!GH]0FG>CWCOl"Yma@=lV&1hQ#&OU
  825. <^Sj0Jqu.pA:rh6q!k&`oop@fS.9CoB[0>Np*Q'"<e,Y&['JIAP=q&?a^6Ll6#',!tF'!:,uQ@hk$D
  826. />_,?Ghme_+bJFGjcS3"K>I[<S7G@"Mk%K<DYL>\L&/eAR1i1NftuW%I.<RhWYSqo_nl6&XntR+/10
  827. *$]WneQr`\7*g20>tK\ihdk`dUD`j3X,G*Y[HWU1!F@q%ca*2gb]SV`_#(FWs=h;r;;D$:lkULX\_(
  828. A>'>:)i)<_S,@%U`ifBGCar/ol/;'M@8:N-L6HXCMhBen&pVa%3HoS6M;V`IOc85Q]t!nD05f<WEcr
  829. 0J'R8=O(M_/j*:ibMs7G-4n2uHB-&UjVS2aNU:q(#oXR-5ei2Bt71Qqa>#u2Y^=@p=Hsf?_?=H41+0
  830. 2)QfK"rFn#f9]>'+39S3>3B,oO=Gb6KB]nWD3<Y2JUXlsG7p8(u[gd)@+"\,Yj+9:pqOjLqFnMp17D
  831. [_CiDLh3p7;?'r,-HC,P@00A&q)/pPa8i>?@H,l)U>r>1H)F&Yit.YqZ_,aOmoc`Kgglq?-.HI=Jpc
  832. 8%`['TGnaPdVFP>Ye-AMT?r*gcF1YKR^PdB\70MUAt:NmS163j)/8BZk6C6W5$s*^u#_ZN.*)?WBAX
  833. _'f4dp_XnPHnQniu^!kNKL/q)1qf]@A(_<$R,,2pcS"ueOcHj(6]gZc4E4LkmS]Ak+:0nVN3q=`@pM
  834. BLdOlAO3&j3Be7`N`LQH?B)K]^;NnDKiUB6C!mR#pK?,&7/-1FPRVn.ma'Ic(Q+k*G.T(78Ju$OPGn
  835. NkaTX0]-S8fX7q:?s>\VXKn0d9`T+!>Bea\-A('=\n*)2"<bLLfP,ho`n<4_5^?<"`uqP>@)fp<?o4
  836. o8q+!:Ecp]0eG;\RFBpp/f(^MIfM2cT@=kWkZB3*3]!B'fRu&g(S5XZ"In^$#WGD?935.M2t@j6A[Z
  837. 9@??2)_Dj)G6-OQDo!jS*,grF=_Z^t]"aIiK+ko%P%36M`Y5lIF;(1FbEcK$cpgT+Vh9V]Zt6H5q8?
  838. n!@p76:P<F;Kg6ks'g3M5dIqTCPs@&!a0CcZi>q6[I%+,XnQsfOfLug0T\<Vo=Pe&r=.bWt`D(3mru
  839. ;+9A4:1XR\SofUH_AO<D%Q\q64cA?kG;34KM32fq/9q8%'CFabS=J/]/E=U^I%cP!dV!_6H/drJr?o
  840. bNl?M9QZJED&0p7/sBFZ[TO.fg6u:3f_q1*A`\D!.SI:u5ij!2,B+05FE8Ym5ZHQ)\.Tqb,%Y;*F&^
  841. )JBfuUm)T0@?=bHDTU@+9O>$&q9gfn=8,F6;AH-;qj9hVGV8IUf!kilj._q$1mudV7`Ga7$?]Ot[-m
  842. XSp9\N0rZjt.QLhHZ*FNolpob!lGH\^XfBl*Z.#[3\\M]94\E7Cl>t1^&f>XOqjnVg0N0g.N7I#I($
  843. .Q7t%B:&p`/*L^9Q@$JS':.nB&6`Dq*q_Jl3T1U@XI"=VCuc%@urbgF'f^3<G4I`Ui(o[gg?N&3g>6
  844. VN$0`@)d>d]I&p8)P1nOtccaI]^p5Ju/E.COf;J/L,"X."75HH:*t$;Q$/aC\K2HomMoq*J014A4bB
  845. C>kr>:4]S6IVCQ+(&[n":Q:-o\2K+*KIhiSZ1(o=0k(^=(_Lpme-4,F(Q`Y&JaEl0*BO3?j[R%$R/C
  846. YF?^lS!V-:k;9R/;4I7)JMU0*JHJe<a-Y?c;Y@%SgM3ZYH+g-3:7?`>RR7CnZ=VV<W?3>3c+N1oE]'
  847. U9N>lUP9=E?q1sW<(V]bo!M8gOR?L7f[=!INDg:C>5Tr;!fWr<ll^Fi@@g8*^TgJcmq.B+^Ydmu0T)
  848. 8aSJpVspZW+Gu#N8+'kZjdYYY9b=1_bR1eYLdXNXE$g*#%j\(1RiuG$/PDT[h>mr5NU5s["/.\Y#fL
  849. -Jt^9,(6gMQ9k11;':4FepRV%Xok>>TRP0l@=.5E;n7GjI_^!c/dc6VT2D'3ni12h-Sk(^P-Gn1*Ic
  850. uVUo,k%pDGc-XmEneeUA.,2Jr3.!I\ih-[L:\XEIY?!9uu[n;GAm:2)F&aI2SqcL/AgtVO+>_F'?&o
  851. 1+=Hq1AcJk!DQ&L@Ql67c:-_^g#dKSCj/i7nHlbPkONE7D0i->*P;bn>)kC:a*fg+j'k>0^-"1D0F2
  852. uZT'o!.'.@P59g(.e*B-dT-?J>'lJbV*MohG/V,eJ+q"2,L#?;5$qCXe-FWEG*/__DcFSrpnVa#%pG
  853. 3+R7]Bq,]1]_I-F8nh5!nu1=o*d9sQCH\bSZV@uJICT`0Ge@C@jF)<Osn@=D)3Gfs"Z19&20=38J$M
  854. 2R1UpH&Q&9W;Ya-ls7Ci;;1G[p8B:f;p]jO9_cdN"I&+#`$cGHq<ugkkJA2*jJT,&75s#tD;RqL4EU
  855. jKo+WIun<9m%9Bi6Y]LO>rg$h7jKM1A`VAP)*N6N"/C$F:$Kk]Kdd01D(:"pY,@p,W46-*]ckBuP<t
  856. UE0W+,oF.4o#*B?'N,2\*:\R\&s@q1[tH7;)9`mMY_,5uYUrqNHJ5V1e"T&Wj*B)d1BDPn)!Deo1F8
  857. mV6]PRr?,qDULPL7#*0F?+AeZ*opDDW&HBiJi-<Nsl_&]/68SHXJOF[p8efW64)k6=IQ2sLc:a)$9+
  858. 7`qnD.7Hqnqd&rFUQV7\=`gK3&R(2E473RHBKJV"c>Rp(pI\*B`s0hL`@<-C!>atH?G#6e0`G-*9r*
  859. 5X[FtLOVeG69FsQHfr0SgQu!Kq8/!a6iUMqR=<Gum*S:O4hR6t*:`4fqN2\dn*E[6F2dAR8=&\^5q+
  860. qs!JWHH,!!nep\L<M]di_cF+@d5.k(/ZgYrs>\*icVj)tT3kUfM-<P&+&Spu$<j<KQITC;-KFqk.f:
  861. =!^P]8Q]XYjAU*087f4A<<>NcWCS*-LhRMYP)DS+g5(u3U2>pu@@r>o5ZemejHT-N3TbIJp;Dgp\W]
  862. oK5VSQU0m4YCe64^2GhQedlX;Z0Yu$.nQ3-)M7p-r4JU>@i<d\UY.Z"ONB:%=3+rTR/?J0W(E-YfG%
  863. g"*s;hK,5VL?(,$?$e0.&iG!M+UqhK6S9!fB%iRV/8Xk)2PKsK"7-cj'=p'?V89qAb$4fW?X,sC!Zu
  864. U+:0_@0P3)^M'/4(Lle*q\VUaf-@NCe7@%<P![=P1O--2WonJPHB,dK4$X242k@'3=,+!jj)?7N*X4
  865. !Kl##kTOSSor"PW)<t!EA3h(iAgO&h0=Z"eGAJ:\*aD/qaMu3@ElgBuVl&g*nE)\Hq%P,"^3d4Q[JM
  866. !`$@1*f"?)O.fodR9C6pSiath_H1![Q#Y7U1&:&m-)**l.3R%^EU"-8hDnUZBj$f,E3rT4(7J2qG[X
  867. 7AQn>nBQ0:n*Pt???SO5qCr^TCrFF,38M:#`u!?b<b)(u'D/#Rrg5c:%HZ'K<A?_oKL4$%c?a'n(DT
  868. c&S_&''(fYm>="0jnIMc/N!#Z6BK$+I8,iJqtCl15<CXT6_6$pot*CML:a(Q1CZEH3-n:M5PN<IV*\
  869. c=5&NM#9o8,-m$6tLDV\9&qm<[*XaZ;eZj^!$6,;,P4$=;!3cKi$E#;`M\u;`F1!9J=HY$,U6t%n(o
  870. gKnAr2CS-r0B4Pu]W5[jVQ\NU2n/WG/3Hd>quS7o?if\PsQ5LG,eiXI@5#jmb]<qPktjDN@bK[WSH!
  871. Gopc.9+=c:*j\3W(g(^N?fZ3;>,80&f;g'^,)MGGqGUX:[oH9tTGr'Je#8^ALM,5M>Z`s,kM][O&NF
  872. BtDgN1_fbtuiaE,NLAkD_6U7k,O,pK):X>]o(4r##j)HR3t@__M(Q8fqj6?^?pQhdL%;qHk_EN@%AH
  873. cpK97%1Dt,D0T.ZL9`/Ms#k&b&P&b./lgXJXD7mUNMCOL:]]HHD@H\9!_DcZpnh%gS&)E,p\fYXe:K
  874. DdKje%ng=]#/YmG+Gr^#Z.Q213$VcP"SJ"!l885u/5DHOLS4Xm;FX!O-['0S505$n7nj=/e&0r)0iB
  875. \a5@RIPJN\#fh)kpJ^l:3rMRLBp_nsZu:iC>cc7hNjRNT-CBU04B[:H-BA*ef5nX&)u8VN0=H*g3)"
  876. Z'"r/?XkUsSWS((\j@I,8$+jHfii;DM'n@"&/$=9N\M]le597m@4Ut4'RL^JJ2anK#dFss$,Tq,KP.
  877. P<MMQ5(7#HfD<AR/K\]@'"#+-=-Zq)]lSI![l'H83K<FE>kDn4%2MH%5u!a28()p9!>cBU)S"hcqe2
  878. A/>4DF]hN@:0LD\am,.#Z-]_9728O$b_8+q%^.pVk:X1O=>9CRF%4jO]7Zk."&H_d,S$'nY('CO)u'
  879. Y@`Q69'Z,K5Jek.kRH.;@-[#d^+fpf1iHLugKr1A[J`gcL1=I/+QPac;FVYt6XPq!5<(dfX9Cn<%qU
  880. HUpE^K])IHm'u_I6ia,oJb6?HSsJ\7'c!K<UGIT?I=(q-YMY,B2LZ_=Mr!3'&+^=Fn"m*TPQnho&*j
  881. EA/UN2>E:Y9It'ZfMhq5Xa[Rmg;Q5]nAkJ$9Et4)+e3u-LE#X5)FTO&0:.K]FN3&/5nK8VhrGb8AS4
  882. kQ,$9+7&#!J8LH]%O+^M`<-,[28U,#/Y<aN/JALbg\,#'n'_/$DA?o1hPS$:0]77,22\hcmj)+8)C_
  883. ?TTX!=&m)S"B-QRVbA&piLWDo9s$$V4^h0fplA=(O;.397*0r[cBG:#@!^U?I7^s?0oP]UcSh35c-9
  884. \p'$h;_JZ.AbMMc3<BHhtKR2P2+R\tYC\hA4/0l5?*ls8:$aPeA_U+%Md)N`?%fMn^7?fu]c210orO
  885. dfu"AaJ(d.ihT4bRk;B/hpCc<t[^j>(g.^![JO)f*#pl>.a(nV&(/)@Q2^_Y\!KrBY.5.&qGo:IZ]G
  886. 4jb)qIY6*X:;+ksB$0+AB,ans!7O/s`,6/-ea$-Oe-0$B,_A<f_]QdVeP[gXN6YtN`0"16=S9u-grd
  887. (t=%E1\(;u=\,;:EB_oAuGM^sLqe4ag>ek+?(LbM>0K2mhm[KU-]n8WlLAoeA4d=lDX)`#rK)l":=]
  888. NDS`$<SjiC`ENSB_"[GO_c$>6XqaIfK/%W#p:f\`Z9!rf)#NpE.&rDK$WO>]YlQXI;LS?V'FY5Lm50
  889. hlaIe3Ym@4d*!$$ns-[fZ#=B,@K=T(?ACJSAEnF([e1^qK,C"J7&oe0q8D4M,j:]S^,9E3'(sZhFS@
  890. %(m@7QFXLM)eNdLA?rS;U$`h'WgWp.[tr*S8kn:DSeQ>f>A7EkmKm!<L*c\:&VYJZ#o4;T2(P2Do,5
  891. N?#-]Q"de_*:,/0>i;$@X*'"9NAT%K?.n;6)A8XpQ;tY`p2LXm/EtCt&q3UH8UG$3)PT+?)Qk%&G`F
  892. bSh8pV+)M6iS^b\:%*F9"+$/ePQ*ReN(+8E2Ki0,]eqJ49*+4*ua^'r,cYm@OA6[`Vnj$>OIrT/U8!
  893. 7WfMPDDU65&VRX_TM6`f$.$BZm6DIh'gRm[GBGmn@I^-XEe^ChDF7Mma8+eP!R3;p"+N)OlkVS*,OI
  894. LoJRfN;CRB1j<"Ir?+^3rK*edlF:,E$W+8OU*Rf^o.%hV;j-8Ieic$>[g8b76!L\/!A`hA:FbEKR`T
  895. QA;Y#':p!4pk9jYB@Gn1_Z'-_.'sA(Kfk%O$86!Uaq[R%?\h4<Y\<l`9O^@-c0\7N^4U$b_Q>akduC
  896. 1NJdV8];/jrWB1D($+8A?4;HYD]RF0/j]K7)Y!_Jhe*la-Ar@XkZD[Wlf7B@_QS#m6fPPA5&Tf!)!e
  897. ^'-0n;;Y,+!%K"V%7@ijGrPVV`&D,$<j0G+pO)j#lTJMQ5ZC=u@QMuD=1IIQb3FT#Gaisptb%e90A1
  898. tU]?bA#D%X;iUK3!op`/?af2`R:@<5Gqu]B5I2+e#:590oW*`%Hek7eJb'Q<W_(q8i5u8nF1u`oSc>
  899. $0gcLSBHl4@#e>dO.dYdn@`2F#e/@^&9n/5&+bT_eoZLc7LB8gB@SM:<*Ml81^;2,66H!?Z(N#d6qn
  900. )H5hsRI!jTO!)4lUYRS@rW'm&gKCm2RsuNV@=OiJm[OLK@9$0/2.Pdi>L_XkFaXa+*<Lpc1S4JH[bk
  901. -QZo-8Jj,OaIMuVBe%A;7sXc*a;`M/].\q@8Zr0;S:O>3QO'F#/qt#6[<1oAn$j/8*/ST'M]WP.fcc
  902. th7h=X6MD7ElSX[3k.m;p9'U<!Wa<'<f6bjt"D6koQ59;!P*boB2AeQeN:HE#6!$NN0#gW<ZPj\6bP
  903. 4[*?gsQ*dC+k:4i/-CPH%:pE>91q(X6#*3[g7MGr?DgR/,H4^Dk]>oSDPH:g!<b$#8=to%U_1fJBkt
  904. uTVGP/NGJlu1MP"J1ee2SeRu<t]Q+VON3PeW1*Nu_KCT$q7Y3J`"+1)3Ph9$;EJS!7r.BV9=;i"*HV
  905. OOU"faSs@%&8\$Z(9O9)&E.UrLdFa[Mq)FK!n"(Vun>aFj\THd?:ZW'NE:&%p"H1M-L.`_F;%n8&.6
  906. e>%Y"E73^"0"CM3LtA&*1FP_;3X!e5iuVU=*co[F\ML&_8m'k$3+E]_d\.s0@=@,FA,70j,f85u!&<
  907. J2f6oD.=g7Vi"jQ*o=:]H<3Vh\>@YSAO93C'.Bm=@1\I=R`;$dc&,%5a):_(c:`^$)BP%!qk:ZrSt#
  908. Th$2LgFC:4b9iA"bm#m(gNbiE,WV^298,Xd)Ban.'Yt.BDU+!Vo75PhcaMPbbFG$Sp'0qQ6>aM&GrN
  909. #@1pLK)$5M-&mVDTTG8a'PP]#1EgnF@O*FKkrQucPNZ'G^A;e?95^>ipZ4H,>(D+\O5U>qD"`6bK]+
  910. Rq:@R./EaEh+4igM6-6l#9H!S$_R""_@n>nHu1&*)XjH;5Wb8#AioI#6pg!<pIe!A=,_80C3E,CoK=
  911. 9[%2hnA2Me+!Oig#jWoPE"!PISpqjq,=69oL#;7@V*nhVqb0n_)Li!S1h<Vta!A<%5uA&[-!#[fdUW
  912. G!K/3Ueems3-(fQeBBG#AjMG<UaCk,]2LV=X?peABY-fPJ;1)C<lOn]m,DL^`E0a#b]hdX2+rrFg1#
  913. +V%oC!lpa?(#,.1^UR7$*tELM)+`,5D;LR8El@C?0l=h%ld:Fj(AS"ip')NJA<`$#6b/ln5M77(:"!
  914. Bn<$M.ASTt1$l?):6<m!co0Y@08E#N;iCI7\8VRX6N+h8fDJI!.7>N\?`o(hNJuP]/1^bTW/VMW3!'
  915. C90-t^0gJP[?8idsm\T_/.O"BZ\%8Ocs,Y2qW@7EeS%*`Ih"Ac(jUC+4m^\8]>@TcVkGq.ZE:d/ijT
  916. ^fhGN%6$`ioO.(O@%#Z+jRL9]7uTg7!hu-.D:443,n#89'5=2uZB#>fEE#GB@Ci1@?8NUaZ!;[_Iut
  917. bs8&&JP5U7sOK]=c5keff.OD5:7h8d8iJlLb>&hrilBG@'"q#&R$ku&6+VBH;c_m^U%A#&jZ:FI.,Y
  918. uIFCC7\gbOYPkTb`9U(,$*\]>`J+o[;j%mR4MZt8Et:-Y4[45P%3F3MC5)m.ajsu2oPb?gsX/D@H(,
  919. X&IO9T-8ilSO;/C;+qb6u=!n_Oa'0Vh;55\RIOGX7LXkp@m6khH%coAn%\HnjL3<Y[#)klN*G<_V]/
  920. V*mT8?.q(U?FE;.=P&c\E[]0mLj:RshY5B'p77`8h(Z6:Ga,<'?CpH-%tp.WIj7gPqA+"GP"`nCjgO
  921. ]7WBYK2G)U$Fi=SR=1hM6u?(CSq:u6-&m*n5@)N[Um3XC.g6A.du#iR=]17[0K)t.(,;'mY$9nL6_Q
  922. )cjD*A4Y!E*&,-P'"]@U,(N11+UYRUYp!>G_LA0^Z.'%2V`iCUgP^.]SUDP3]&G9Z:%,F0Gep>]:(Y
  923. 5i#/k2e&h%tGn*6,t09fIg?>jE@M82?=;,W@$V2r@!Vg&#jhJaO#b0R"_>Y/]+)eb`(3h63`HlR'-Z
  924. S9TJ.G+"q0F`*"_pn0n\lp^U#&McbQ]1LVc:.L@n4+jNJu7o!LXPlA^1!p!I)BS1/57LDqZ0Y%@r,S
  925. .qV@hsk#^p`B9,>o2JXaiqN*"t0,VPhe0*E,?W(l)gZe7Kl!'4LK5P"hoI-h)l=.[jp;E^2Lj#p.`f
  926. K7P35B;!YSJsds2j^Q/tP`Mr?X3?^=MSm)?(icm_OV_2V-sT3A5b)$f8lSN&;2uL5!jWc-F+*tRZ=u
  927. 4R't:CI
  928. xbtoa End N 6931 1b13 E a8 S cff7c R 33ef638d
  929. SHAR_EOF
  930. if test 8835 -ne "`wc -c < 'andy.tif.Z.btoa'`"
  931. then
  932.     echo shar: "error transmitting 'andy.tif.Z.btoa'" '(should have been 8835 characters)'
  933. fi
  934. fi
  935. exit 0
  936. #    End of shell archive
  937.  
  938. -- 
  939. Andreas Lampen, TU Berlin
  940. UUCP:   andy@coma (unido!coma!andy)
  941. BITNET: andy@db0tui62
  942.